3.1 选择语句——switch

3.1.1 switch语句格式:

1
2
3
4
5
6
7
8
9
10
11
12
switch(表达式) {
case 常量值1:
语句体1;
break;
case 常量值2:
语句体2;
break;
...
default:
语句体n+1;
break;
}

3.1.2 执行流程

  • 首先计算出表达式的值
  • 其次,和case依次比较,一旦有对应的值,就会执行相应的语句,在执行的过程中,遇到break就会结束。
  • 最后,如果所有的case都和表达式的值不匹配,就会执行default语句体部分,然后程序结束掉。

3.1.3 注意事项

  • 多个case后面的数值不可以重复。
  • switch后面小括号当中只能是下列数据类型:
  • 基本数据类型:byte/short/char/int
  • 引用数据类型:String字符串、enum枚举
  • switch语句格式可以很灵活:前后顺序可以颠倒,而且break语句还可以省略【3.2】。

3.1.4 代码实例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
public static void main(String[] args) {
//定义变量,判断是星期几
int weekday = 6;
//switch语句实现选择
switch(weekday) {
case 1:
System.out.println("星期一");
break;
case 2:
System.out.println("星期二");
break;
case 3:
System.out.println("星期三");
break;
case 4:
System.out.println("星期四");
break;
case 5:
System.out.println("星期五");
break;
case 6:
System.out.println("星期六");
break;
case 7:
System.out.println("星期日");
break;
default:
System.out.println("你输入的数字有误");
break;
}
}

switch语句中,表达式的数据类型,可以是byteshortintcharenum(枚举),JDK7后可以接收字符串。

3.2 case的穿透性

  在switch语句中,如果case的后面不写break,将出现穿透现象,也就是不会在判断下一个case的值,直接向后运行,直到遇到break,或者整体switch结束。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public static void main(String[] args) {
int i = 5;
switch (i){
case 0:
System.out.println("执行case0");
break;
case 5:
System.out.println("执行case5");
case 10:
System.out.println("执行case10");
default:
System.out.println("执行default");
}
}

  上述程序中,执行case5后,由于没有break语句,程序会一直向后走,不会在判断case,也不会理会break,直接运行完整体switch。

  由于case存在穿透性,因此初学者在编写switch语句时,必须要写上break。